package com.heima.leetcode.datastructure.binarytree;

/**
 * <strong>判断一个二叉树是否是对称的 101</strong>
 * @author 勾新杰
 * @version 1.0
 * @date 2024/9/8 12:43
 */
public class IsSymmetric {

    /**
     * 判断二叉树是否对称
     * @param root 根节点
     * @return 对称返回true
     */
    public static boolean isSymmetric(TreeNode root){
        if (root == null){
            return false;
        }
        return isSymmetric(root.left,root.right);
    }

    /**
     * <strong>判断一个二叉树的左子树和右子树是否对称</strong>
     * @param leftTree 左子树
     * @param rightTree 右子树
     * @return 对称返回true
     */
    private static boolean isSymmetric(TreeNode leftTree, TreeNode rightTree){
        // 左子树和右子树都为空说明对称
        if (leftTree == null && rightTree == null){
            return true;
        }
        // 左子树和右子树有一个为空则不对称
        else if (leftTree == null || rightTree == null) {
            return false;
        }
        // 左子树和右子树都不为空
        else {
            if (leftTree.val != rightTree.val){
                return false;
            }
        }
        // 左子树和右子树的根节点值相等，则递归比较，随着递归深入，就变成了各个y轴两边对应的分叉是否对称
        return isSymmetric(leftTree.left,rightTree.right) && isSymmetric(leftTree.right,rightTree.left);
    }
}
